package com.mf.storage.service;

import java.io.File;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 对象存储服务
 * User: zhaoming
 * Date: 2019-02-13
 * To change this template use File | Settings | File Templates.
 **/
public interface ObjectStorageService {

    /**
     * 上传文件对象
     * @param bucketName 存储名称
     * @param objectName 对象名称
     * @param file 文件
     */
    void putObject(String bucketName, String objectName, File file);

    /**
     * 上传输入流对象
     * @param bucketName 存储名称
     * @param objectName 对象名称
     * @param input 输入流
     */
    void putObject(String bucketName, String objectName, InputStream input);

    /**
     * 下载文件到输入流
     * @param bucketName 存储名称
     * @param objectName 对象名称
     * @return 字节数组
     */
    byte[] getObject(String bucketName, String objectName);

    /**
     * 下载文件到本地
     * @param bucketName 存储名称
     * @param objectName 对象名称
     * @param file 文件
     */
    void getObject(String bucketName, String objectName, File file);

    /**
     * 删除单个对象
     * @param bucketName 存储名称
     * @param objectName 对象名称
     */
    void deleteObject(String bucketName, String objectName);

    /**
     * 删除多个对象
     * @param bucketName 存储名称
     * @param objectNames 对象名称列表
     * @return 执行结果
     */
    Map<String, List<String>> deleteObjects(String bucketName, List<String> objectNames);

    /**
     * 获取对象URL
     * @param bucketName 存储名称
     * @param objectName 对象名称
     * @return 对象访问URL
     */
    String getObjectUrl(String bucketName, String objectName);

    /**
     * 获取对象列表
     * @param bucketName 存储名称
     * @param prefix 前缀
     * @param marker 标记
     * @param delimiter 对象名称分组
     * @param maxKeys 最大个数
     * @return 对象列表
     */
    List<String> listObjects(String bucketName, String prefix, String marker, String delimiter, Integer maxKeys);

}
